package com.example.judge.callback;

import com.example.common.core.enums.CodeRunStatus;
import com.github.dockerjava.core.command.ExecStartResultCallback;
import cn.hutool.core.util.StrUtil;
import com.github.dockerjava.api.model.Frame;
import com.github.dockerjava.api.model.StreamType;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class DockerStartResultCallback extends ExecStartResultCallback {

    private CodeRunStatus codeRunStatus;  //记录执行成功还是失败

    private String errorMessage; //错误信息

    private String message; //成功信息

    //用于处理每个输出帧
    //Frame 对象包含输出流的数据和类型。
    @Override
    public void onNext(Frame frame) {
        //获取当前帧的流类型。
        StreamType streamType = frame.getStreamType();
        //如果是标准错误流
        if (StreamType.STDERR.equals(streamType)) {
            if (StrUtil.isEmpty(errorMessage)) {
                //设置失败信息
                errorMessage = new String(frame.getPayload());
            } else {
                //
                errorMessage = errorMessage + new String(frame.getPayload());
            }
            //设置状态信息表示执行失败
            codeRunStatus = CodeRunStatus.FAILED;
        } else {
            //设置成功信息
            message = new String(frame.getPayload());
            //设置状态信息表示执行成功
            codeRunStatus = CodeRunStatus.SUCCEED;
        }
        super.onNext(frame);
    }

}